SQL ইনজেকশন এবং XSS থেকে সুরক্ষা

Web Development - ওয়েব ডেভেলপার্স (Web Developers Guide) - সিকিউরিটি বেস্ট প্র্যাকটিস
239

SQL ইনজেকশন কি?

SQL ইনজেকশন (SQL Injection) একটি নিরাপত্তা দুর্বলতা যা ওয়েব অ্যাপ্লিকেশনের ডেটাবেসকে লক্ষ্য করে এবং আক্রমণকারীকে ডেটাবেসে অননুমোদিতভাবে প্রবেশ এবং তথ্য চুরি করতে বা পরিবর্তন করতে সক্ষম করে। এটি সাধারণত তখন ঘটে যখন ওয়েব অ্যাপ্লিকেশন ব্যবহারকারীর ইনপুট (যেমন ফর্ম বা URL) সঠিকভাবে যাচাই না করে ডেটাবেস কুয়েরির মধ্যে ইনজেক্ট করে।

SQL ইনজেকশনের মাধ্যমে আক্রমণকারী একটি বা একাধিক SQL কমান্ড চালাতে পারে যা ডেটাবেসের তথ্য দেখতে, আপডেট করতে বা মুছে ফেলতে পারে। এতে নিরাপত্তা বিপদ তৈরি হয়, যেমন পাসওয়ার্ড চুরি, অ্যাকাউন্ট হাইজ্যাকিং, এবং অতি গুরুত্বপূর্ণ তথ্য চুরি।

SQL ইনজেকশনের উদাহরণ:

ধরা যাক, একটি ওয়েব অ্যাপ্লিকেশন ব্যবহারকারীকে লগইন করার জন্য একটি ফর্ম প্রদান করে, যেখানে ইউজারনেম এবং পাসওয়ার্ড ইনপুট নেওয়া হয়। যদি ইনপুটগুলো ডেটাবেস কুয়েরিতে সরাসরি যোগ করা হয়, তাহলে SQL ইনজেকশনের মাধ্যমে আক্রমণকারী এই রকম একটি ইনপুট ব্যবহার করতে পারে:

' OR 1=1 --

এটি কুয়েরিতে পরিবর্তন এনে ডেটাবেসের সমস্ত তথ্য ফেরত আনতে পারে, কারণ 1=1 সবসময় সত্য।


SQL ইনজেকশন থেকে সুরক্ষা

SQL ইনজেকশন থেকে সুরক্ষিত থাকতে, ডেভেলপারদের কিছু নিরাপদ কোডিং অভ্যাস অনুসরণ করা উচিত:

১. প্রিপেয়ারড স্টেটমেন্ট (Prepared Statements) এবং প্যারামেটারাইজড কুয়েরি ব্যবহার:

প্রিপেয়ারড স্টেটমেন্ট বা প্যারামেটারাইজড কুয়েরি SQL ইনজেকশন প্রতিরোধের অন্যতম কার্যকর পদ্ধতি। এতে ব্যবহারকারীর ইনপুট আলাদা করে ডেটাবেস কুয়েরির অংশ হিসেবে যোগ করা হয় না, বরং কুয়েরি ডিফাইন করা হয় এবং ইনপুট প্রাসঙ্গিকভাবে পরবর্তী সময়ে প্রেরণ করা হয়।

PHP উদাহরণ (MySQLi):

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$username = $_POST['username'];
$password = $_POST['password'];
$stmt->execute();

২. ইনপুট ভ্যালিডেশন এবং স্যানিটাইজেশন:

ব্যবহারকারীর ইনপুটগুলি যাচাই করে এবং স্যানিটাইজ করে SQL ইনজেকশন প্রতিরোধ করা যায়। যেমন:

  • ইনপুটে শুধুমাত্র অনুমোদিত ক্যারেক্টারগুলো গ্রহণ করুন (যেমন অক্ষর, সংখ্যা, বিশেষ চিহ্ন সীমিত করুন)।
  • HTML বা JavaScript থেকে ইনপুট পরিষ্কার করতে HTMLentities() বা strip_tags() ব্যবহার করুন।

৩. ডেটাবেসের সীমিত অনুমতি প্রদান:

ডেটাবেস ইউজারকে সর্বনিম্ন প্রিভিলেজ দিন। যদি কোনো অ্যাপ্লিকেশন শুধুমাত্র ডেটা পড়ার অনুমতি প্রয়োজন, তবে ডেটাবেস ইউজারকে শুধুমাত্র SELECT অনুমতি দিন, এবং ডেটাবেসের ডিলিট, আপডেট বা ইনসার্ট অ্যাকসেস নিষিদ্ধ করুন।


XSS (Cross-Site Scripting) কি?

XSS (Cross-Site Scripting) একটি নিরাপত্তা দুর্বলতা যা আক্রমণকারীকে একটি ওয়েব পৃষ্ঠায় ম্যালিশিয়াস স্ক্রিপ্ট (যেমন JavaScript) ইনজেক্ট করতে সক্ষম করে, যা অন্য ব্যবহারকারীদের ব্রাউজারে চালানো হয়। এটি সাধারণত ব্যবহারকারীর ইনপুট যাচাই না করার ফলে ঘটে, যেমন ফর্মের ইনপুট ফিল্ড বা URL থেকে। XSS আক্রমণকারীর স্ক্রিপ্ট বা কোড ব্যবহারকারীকে বিভ্রান্ত করতে, তথ্য চুরি করতে বা সেশন হাইজ্যাকিং করতে ব্যবহৃত হতে পারে।

XSS আক্রমণের উদাহরণ:

ধরা যাক, একটি ওয়েবসাইট ব্যবহারকারীদের মন্তব্য করার অনুমতি দেয়, এবং তারা HTML বা JavaScript কোড ইনপুট করতে পারে। যদি এই ইনপুটগুলো সঠিকভাবে স্যানিটাইজ না করা হয়, আক্রমণকারী নিচের মতো কিছু স্ক্রিপ্ট ইনপুট করতে পারে:

<script>alert('Hacked!');</script>

এটি ব্যবহারকারীর ব্রাউজারে চলবে এবং আক্রমণকারী দ্বারা প্রাপ্ত তথ্য বা অন্যান্য ক্ষতিকারক কার্যকলাপ ঘটাবে।


XSS থেকে সুরক্ষা

XSS আক্রমণ থেকে সুরক্ষা নিশ্চিত করতে নিচের পদ্ধতিগুলি অনুসরণ করা উচিত:

১. ইনপুট ভ্যালিডেশন এবং স্যানিটাইজেশন:

ব্যবহারকারীর ইনপুট যাচাই ও স্যানিটাইজ করার মাধ্যমে XSS আক্রমণ প্রতিরোধ করা যায়।

  • HTML স্পেশাল ক্যারেক্টারগুলো যেমন <, >, &, " ইত্যাদি স্যানিটাইজ করতে হবে।
  • PHP এর htmlspecialchars() বা strip_tags() ফাংশন ব্যবহার করে HTML ইনপুট স্যানিটাইজ করা যেতে পারে।

PHP উদাহরণ:

$comment = htmlspecialchars($_POST['comment'], ENT_QUOTES, 'UTF-8');

২. Content Security Policy (CSP):

Content Security Policy (CSP) একটি নিরাপত্তা বৈশিষ্ট্য যা XSS আক্রমণ প্রতিরোধ করতে সাহায্য করে। এটি ব্রাউজারকে বলে দেয় কোথা থেকে স্ক্রিপ্ট লোড করা যেতে পারে, ফলে একে অপরের স্ক্রিপ্ট রিফিউজ করা হয়।

CSP হেডার উদাহরণ:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com;

৩. HTTPOnly এবং Secure Cookies:

যতটুকু সম্ভব, HTTPOnly এবং Secure ফ্ল্যাগ ব্যবহার করুন যাতে ব্রাউজার কুকির মাধ্যমে স্ক্রিপ্ট বা JavaScript অ্যাক্সেস করতে না পারে। এতে সেশন হাইজ্যাকিং প্রতিরোধ করা যায়।

Set-Cookie: sessionid=abc123; HttpOnly; Secure

৪. JavaScript ইনপুট স্যানিটাইজেশন:

যদি ওয়েব অ্যাপ্লিকেশন JavaScript কোড গ্রহণ করে, তবে এটি সঠিকভাবে স্যানিটাইজ করা উচিত। eval(), document.write() এবং অন্যান্য বিপজ্জনক ফাংশন থেকে বিরত থাকতে হবে।


সারাংশ

SQL ইনজেকশন এবং XSS (Cross-Site Scripting) হল দুটি গুরুত্বপূর্ণ নিরাপত্তা দুর্বলতা, যা ওয়েব অ্যাপ্লিকেশন এবং ব্যবহারকারীর তথ্যকে ঝুঁকির মধ্যে ফেলে। SQL ইনজেকশন থেকে সুরক্ষিত থাকতে, প্রিপেয়ারড স্টেটমেন্ট এবং প্যারামেটারাইজড কুয়েরি ব্যবহার করা উচিত, এবং XSS থেকে সুরক্ষিত থাকার জন্য ইনপুট স্যানিটাইজেশন, CSP, এবং HTTPOnly Cookies ব্যবহার করা উচিত। এই নিরাপত্তা ব্যবস্থা গুলি ওয়েব অ্যাপ্লিকেশনকে আক্রমণকারীদের থেকে সুরক্ষিত রাখতে সাহায্য করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...